﻿using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Repository;
using DevTeam;
using System;
using System.Data;
using System.Windows.Forms;

namespace ConfExpert.Forms.Depo.Kargo
{
    public partial class KargoFaturaDetay : XPopupForm
    {
        int kargoId;
        int faturaTipiId;
        int kargoTipiId;
        int kargoFaturaId = -1;
        string tip;
        //bool faturaGirildi = false;

        public KargoFaturaDetay(int KargoId, int FaturaTipiId, string tip)
        {
            InitializeComponent();
            this.kargoId = KargoId;
            this.faturaTipiId = FaturaTipiId;
            this.tip = tip;
        }

        private void KargoFaturaDetay_Load(object sender, EventArgs e)
        {
            txtPrefix.ReadOnly = true;
            DataTable dtKargoTipi = Session.DataManager.ExecuteDataTableByQuery("select KargoTipiId from Kargo where KargoId = " + kargoId);
            kargoTipiId = dtKargoTipi.Rows[0][0].ToInt(-1);

            RepositoryItemGridLookUpEdit riCurrency = GetCustomGLE(Session.DataManager.ExecuteDataTableByQuery("select * from Currency"), "Abbr", "CurrencyId");
            riCurrency.TextEditStyle = TextEditStyles.DisableTextEditor;
            gleCurrency.Properties.Assign(riCurrency);
            gleCurrency.EditValue = 1;

            string sql = "select * from KargoFatura where KargoId = " + this.kargoId + " and FaturaTipiId = " + this.faturaTipiId;
            DataTable dt = Session.DataManager.ExecuteDataTableByQuery(sql);

            lblFaturaTipi.Text = faturaTipiId == 1 ? "Kargo Faturası" : "Malzeme Faturası";
            //txtPrefix.Text = "S"; // kargoTipiId == 1 && faturaTipiId == 2 ? "MEX" : "S"; //BS! - Burada sadece anında girilenler MEX olabilir!!! Dikkat!

            if (dt.Rows.Count > 0)
            {
                if (dt.Rows[0]["FaturaNo"].ToStr().StartsWith("MEX"))
                {
                    txtFaturaNo.Text = dt.Rows[0]["FaturaNo"].ToStr().Substring(4);
                    txtPrefix.Text = "MEX-";
                }
                else if (dt.Rows[0]["FaturaNo"].ToStr().StartsWith("S"))
                {
                    txtFaturaNo.Text = dt.Rows[0]["FaturaNo"].ToStr().Substring(1);
                    txtPrefix.Text = "S";
                }
                deFaturaTarihi.EditValue = dt.Rows[0]["FaturaTarihi"].ToDate();
                numFaturaTutar.Value = dt.Rows[0]["FaturaTutar"].ToDecimal();
                gleCurrency.EditValue = dt.Rows[0]["CurrencyId"].ToInt(-1);
                txtFaturaNotu.Text = dt.Rows[0]["Note"].ToStr();
                kargoFaturaId = dt.Rows[0]["KargoFaturaId"].ToInt(-1);
                //faturaGirildi = true;
            }
            else
                txtPrefix.Text = tip;

            txtFaturaNo.TextChanged += txtFaturaNo_TextChanged;
            //gvFaturaDetay.Init(dt);
            //gvFaturaDetay.MakeColumnInvisible("KargoFaturaId", "KargoId", "FaturaTipiId", "IsBilled");
            //gvFaturaDetay.BestFitColumns();
        }

        void txtFaturaNo_TextChanged(object sender, EventArgs e)
        {
            string tmp = txtFaturaNo.Text;
            foreach (char c in tmp.ToCharArray())
                if (!(c >= '0' && c <= '9'))
                    tmp = tmp.Replace(c.ToString(), "");
            txtFaturaNo.Text = tmp;
        }

        private void txtFaturaNo_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar);
        }

        private void numFaturaTutar_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '.')
                e.KeyChar = ',';
        }

        private void btnKaydet_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {

            if (txtPrefix.Text.StartsWith("MEX") && txtFaturaNo.Text.Length != 4)
            {
                    XtraMessageBox.Show("MİKRO İHRACAT için fatura numarası 4 karakterli bir sayı olmalıdır.", "Hata");
                    return;
            }
            else if (txtPrefix.Text.StartsWith("S") && txtFaturaNo.Text.Length != 5)
            {
                XtraMessageBox.Show("PROFORMA gönderisi için fatura numarası 5 karakterli bir sayı olmalıdır.", "Hata");
                return;
            }

            if (numFaturaTutar.Value == 0)
                if (XtraMessageBox.Show("Fatura tutarı 0 mı olmalı?", "DİKKAT!", MessageBoxButtons.YesNo) == DialogResult.No)
                    return;

            string faturaNo = txtPrefix.Text + txtFaturaNo.Text;
            DateTime faturaTarihi = deFaturaTarihi.EditValue.ToDate();
            double faturaTutari = Convert.ToDouble(numFaturaTutar.Value);

            if (kargoFaturaId == -1)
                ExecuteNonQuery("InsKargoFatura", kargoId, faturaTipiId, faturaNo, faturaTarihi, faturaTutari, gleCurrency.EditValue, txtFaturaNotu.Text);
            else
                ExecuteNonQuery("UpdKargoFatura", kargoFaturaId, faturaNo, faturaTarihi, faturaTutari, gleCurrency.EditValue, txtFaturaNotu.Text);

            XtraMessageBox.Show("Kayıt başarılı.");
            this.Close();
        }
    }
}